#!/bin/bash

# 日志文件路径
LOG_FILE="/var/log/sip2_restart.log"

# 端口列表
PORTS=("2001" "2010" "2029" "2028" "2008" "2011" "2013" "2016" "2026" "2009")

# 指令
COMMAND="63001123456789020090407 163519AO|AA360424199904293033|AD|AY1AZF4A6|"

# 超时时间（秒）
TIMEOUT=15

# 端口检查间隔时间（秒）
WAIT_TIME=15

# 重启脚本路径
RESTART_SCRIPT="/home/acsControl.sh"

# 输出日志函数，附带时间戳
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a "$LOG_FILE"
}

# 检查端口是否正常，最多检查3次
check_port() {
    local port=$1
    local response
    local status
    local success_count=0
    local max_retries=3

    log "检查端口 $port..."

    # 尝试最多检查 max_retries 次
    for ((i=1; i<=max_retries; i++)); do
        # 发送指令并检查响应
        response=$(echo -n "$COMMAND" | timeout $TIMEOUT nc -w $TIMEOUT localhost $port 2>&1)
        status=$?

        log "第 $i 次检查 - 端口 $port 响应: $response"
        log "Netcat 退出状态: $status"

        # 如果检查成功（状态码为0），认为端口正常
        if [ $status -eq 0 ]; then
            log "端口 $port 正常，返回数据: $response"
            success_count=$((success_count + 1))
            break
        fi

        # 如果连续3次都失败，跳出检查
        if [ $i -eq $max_retries ]; then
            log "端口 $port 在 $max_retries 次检查中均未正常，执行重启..."
            if $RESTART_SCRIPT -s restart -p $port; then
                log "端口 $port 重启成功"
            else
                log "端口 $port 重启失败"
            fi
        fi

        # 如果检查成功，跳出循环
        if [ $success_count -ge 1 ]; then
            break
        fi
    done
}

# 开始执行，记录脚本执行开始时间
log "脚本执行开始..."

# 循环检查每个端口，每次检查后等待5秒
for port in "${PORTS[@]}"; do
    check_port $port
    
    # 如果不是最后一个端口，则等待指定的时间
    if [ "$port" != "${PORTS[-1]}" ]; then
        log "等待 $WAIT_TIME 秒后检查下一个端口..."
        sleep $WAIT_TIME
    fi
done

# 脚本执行结束时间
log "脚本执行结束"